/**
 * 数组 https://book.kotlincn.net/text/arrays.html
 */
fun main71() {
    /**
     * 1.数组在 Kotlin 中使用 Array 类来表示。
     *   它定义了 get() 与 set() 函数（按照运算符重载约定这会转变为 []）与 size 属性及其他有用的成员函数：
     * @see Array
     */
    val array = arrayOf(1, 2, 3)
    array.forEach { print("$it ") }
    println()

    //2.创建一个指定大小的、所有元素都为空的数组
    val arrayOfNulls = arrayOfNulls<Int>(3)
    arrayOfNulls.forEach { print("$it ") }
    println()

    //3.接受数组大小以及一个函数参数的 Array 构造函数，用作参数的函数能够返回给定索引的元素：
    val array1 = Array(5) { i -> (i * i).toString() }
    array1.forEach { print("$it ") }
    println()
}


/**
 * 原生类型数组
 * Kotlin 也有无装箱开销的类来表示原生类型数组:
 *  ByteArray、 ShortArray、IntArray 等等。
 *  这些类与 Array 并没有继承关系，但是它们有同样的方法属性集。它们也都有相应的工厂方法:
 */
fun main72() {
    val x: IntArray = intArrayOf(1, 2, 3)
    x[0] = x[1] + x[2]
    x.forEach { print("$it ") }
    println()

    // 大小为 5、值为 [0, 0, 0, 0, 0] 的整型数组
    val arr0 = IntArray(5)
    arr0.forEach { print("$it ") }
    println()

// 用常量初始化数组中的值的示例
// 大小为 5、值为 [39, 39, 39, 39, 39] 的整型数组
    val arr1 = IntArray(5) { 39 }
    arr1.forEach { print("$it ") }
    println()

// 使用 lambda 表达式初始化数组中的值的示例
// 大小为 5、值为 [0, 1, 2, 3, 4] 的整型数组（值初始化为其索引值）
    val arr2 = IntArray(5) { it * 1 }
    arr2.forEach { print("$it ") }
    println()
}
